package com.zzyl.nursing.service.impl;



import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zzyl.nursing.service.WechatService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class WechatServiceImpl implements WechatService {


    // 登录
    private static final String REQUEST_URL = "https://api.weixin.qq.com/sns/jscode2session?grant_type=authorization_code";

    // 获取token
    private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";

    // 获取手机号
    private static final String PHONE_REQUEST_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=";


    @Value("${wechat.appId}")
    private String appid;

    @Value("${wechat.appSecret}")
    private String secret;


    /**
     * 获取openid
     * @param code
     * @return
     */
    @Override
    public String getOpenid(String code) {

        // 获取公共参数
        Map<String,Object> paramMap = getAppConfig();
        paramMap.put("js_code", code);

        String result = HttpUtil.get(REQUEST_URL, paramMap);
        // 结果是一个map
        JSONObject jsonObject = JSONUtil.parseObj(result);
        // 判断接口响应是否出错
        if(ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {
            throw new RuntimeException(jsonObject.getStr("errmsg"));
        }

        String openid = jsonObject.getStr("openid");

        return openid;
    }

    /**
     * 封装公共参数
     * @return
     */
    private Map<String, Object> getAppConfig() {
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("appid", appid);
        paramMap.put("secret", secret);
        return paramMap;
    }

    /**
     * 获取手机号
     * @param detailCode
     * @return
     */
    @Override
    public String getPhone(String detailCode) {

        String token = getToken();
        String url = PHONE_REQUEST_URL + token;
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("code", detailCode);
        // 发起请求
        String result = HttpUtil.post(url, JSONUtil.toJsonStr(paramMap));
        // 是一个map
        JSONObject jsonObject = JSONUtil.parseObj(result);
        // 判断接口响应是否出错
        if(jsonObject.getInt("errcode") != 0) {
            throw new RuntimeException(jsonObject.getStr("errmsg"));
        }

        return jsonObject.getJSONObject("phone_info").getStr("phoneNumber");
    }

    /**
     * 获取token
     * @return
     */
    private String getToken() {

        Map<String, Object> paramMap = getAppConfig();
        // 发起请求
        String result = HttpUtil.get(TOKEN_URL, paramMap);
        // 是一个map
        JSONObject jsonObject = JSONUtil.parseObj(result);
        // 判断接口响应是否出错
        if(ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {
            throw new RuntimeException(jsonObject.getStr("errmsg"));
        }

        String token = jsonObject.getStr("access_token");

        return token;

    }
}
//   Code
//import cn.hutool.core.util.ObjectUtil;
//import cn.hutool.http.HttpUtil;
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.zzyl.nursing.service.WechatService;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Service;
//
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 微信接口调用
// *
// * @Author mr.li
// * @Date 2025/7/31 14:54
// */
//@Service
//public class WechatServiceImpl implements WechatService {
//
//    // 登录
//    private static final String REQUEST_URL = "https://api.weixin.qq.com/sns/jscode2session";
//
//    // 获取token
//    private static final String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";
//
//    // 获取手机号
//    private static final String PHONE_REQUEST_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=";
//
//
//    @Value("${wechat.appId}")
//    private String appid;
//
//    @Value("${wechat.appSecret}")
//    private String secret;
//    /**
//     * 获取openid
//     *
//     * @param code
//     * @return
//     */
//    @Override
//    public String getOpenid(String code) {
//        HashMap<String, Object> map = new HashMap<>();
//        map.put("js_code",code);
//        map.put("appid",appid);
//        map.put("secret",secret);
//        map.put("grant_type","authorization_code");
//        //发送请求
//        String result = HttpUtil.get(REQUEST_URL, map);
//
//        JSONObject jsonObject = JSONUtil.parseObj(result);
//
//        // 判断接口响应是否出错
//        if(jsonObject.getInt("errcode") != 0) {
//            throw new RuntimeException(jsonObject.getStr("errmsg"));
//        }
//
//        String s = jsonObject.get("openid").toString();
//
//
//        return s;
//    }
//
//    /**
//     * 获取手机号
//     *
//     * @param detailCode
//     * @return
//     */
//    @Override
//    public String getPhone(String detailCode) {
//        String token = getToken();
//        String url = PHONE_REQUEST_URL + token;
//        Map<String, Object> paramMap = new HashMap<>();
//        paramMap.put("code", detailCode);
//        paramMap.put("appid",appid);
//        paramMap.put("secret",secret);
//        // 发起请求
//        String result = HttpUtil.post(url, JSONUtil.toJsonStr(paramMap));
//        // 是一个map
//        JSONObject jsonObject = JSONUtil.parseObj(result);
//        // 判断接口响应是否出错
//        if(jsonObject.getInt("errcode") != 0) {
//            throw new RuntimeException(jsonObject.getStr("errmsg"));
//        }
//
//        return jsonObject.getJSONObject("phone_info").getStr("phoneNumber");
////        HashMap<String, Object> map = new HashMap<>();
////        String token = getToken();
////        //拼接url
////        String url=PHONE_REQUEST_URL+token;
////
////        map.put("appid",appid);
////        map.put("secret",secret);
////        map.put("code",detailCode);
////        String result = HttpUtil.post(url, JSONUtil.toJsonStr(map));
////        JSONObject jsonObject = JSONUtil.parseObj(result);
////
////        // 判断接口响应是否出错
////        if(jsonObject.getInt("errcode") != 0) {
////            throw new RuntimeException(jsonObject.getStr("errmsg"));
////        }
////        String phone = jsonObject.getJSONObject("phone_info").getStr("phoneNumber");
////        return phone;
//    }
//
//
//    /**
//     * 获取token
//     * @return
//     */
//    private String getToken() {
//                HashMap<String, Object> paramMap = new HashMap<>();
//        paramMap.put("appid",appid);
//        paramMap.put("secret",secret);
//        paramMap.put("grant_type","client_credential");
//        // 发起请求
//        String result = HttpUtil.get(TOKEN_URL, paramMap);
//        // 是一个map
//        JSONObject jsonObject = JSONUtil.parseObj(result);
//        // 判断接口响应是否出错
//        if(ObjectUtil.isNotEmpty(jsonObject.getInt("errcode"))) {
//            throw new RuntimeException(jsonObject.getStr("errmsg"));
//        }
//
//        String token = jsonObject.getStr("access_token");
//
//        return token;
////        HashMap<String, Object> map = new HashMap<>();
////
//////        map.put("access_token",code);
////        map.put("appid",appid);
////        map.put("secret",secret);
////        map.put("grant_type","client_credential");
////        String result = HttpUtil.get(TOKEN_URL, map);
////        JSONObject json = JSONUtil.parseObj(result);
////
////        // 判断接口响应是否出错
////        if(json.getInt("errcode") != 0) {
////            throw new RuntimeException(json.getStr("errmsg"));
////        }
////
////        return json.get("access_token").toString();
//    }
//
//
//
//}
